package com.zyn.java8.lambda;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * Lambda集合操作
 * 
 * @author tongyufu
 *
 */
public class ListDemo {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("1", "5", "3");
        ListDemo.foreach(list);
        ListDemo.stream(list);
    }

    public static void stream(List<String> list) {
        list.forEach(n -> System.out.println("Lambda遍历：" + n));

        //方法引用
        list.forEach(System.out::println);

        //stream：以集合类对象list里面的元素为数据源，生成一个流
        //parallel：并行处理
        //map：把每个元素由String转成Integer
        //filter：过滤
        //distinct：过滤重复的数字
        //collect：将最终结果收集到一个List里面
        //forEach：遍历
        list.stream().parallel().map(e -> new Integer(e)).filter(i -> i > 1).distinct()
            .collect(Collectors.toList())
            .forEach(i -> System.out.println("Lambda Stream遍历集合：" + i));

        //将结果集收集到一个map中
        Map<Integer, Integer> map = list.parallelStream().map(e -> Integer.valueOf(e))
            .collect(Collectors.toMap(k -> k, v -> v + 1));

        //将结果集收集到一个map中，list的值作为key，出现的次数作为value
        Map<Integer, Integer> sum = list.stream().map(e -> new Integer(e))
            .collect(Collectors.groupingBy(k -> k, Collectors.summingInt(v -> 1)));
        System.out.println("汇总map：" + sum);
    }

    /**
     * 遍历集合
     */
    public static void foreach(List<String> list) {
        for (String i : list) {
            System.out.println("JDK1.8之前写法:" + i);
        }

        list.forEach(i -> System.out.println("Lambda写法：" + i));
    }

}
